home *** CD-ROM | disk | FTP | other *** search
/ Info-Mac 4 / Info_Mac IV CD-ROM (Pacific HiTech Inc.)(August 1994).iso / Development / Source / MungeImage Source / RequiredEventSupport.p < prev   
Text File  |  1994-05-07  |  4KB  |  132 lines

  1. unit RequiredEventSupport;
  2.  
  3. interface
  4.  
  5.     uses
  6.         Types;
  7.  
  8.     function InitAppleEvents (DoOApp, DoODoc, DoPrint, DoQuit: Ptr): OSErr;
  9.  
  10. implementation
  11.  
  12.     uses
  13.         AppleEvents;
  14.  
  15.     function DoOApp (p: ptr): OSErr;
  16.     inline
  17.         $205F, (* movea.l    (a7)+,a0        ; pop proc/func address    *)
  18.         $4E90; (* jsr            (a0)                ; call proc/func                *)
  19.  
  20.     function DoDocs (fs: FSSpec; p: ptr): OSErr;
  21.     inline
  22.         $205F, (* movea.l    (a7)+,a0        ; pop proc/func address    *)
  23.         $4E90; (* jsr            (a0)                ; call proc/func                *)
  24.  
  25.     function DoQuit (p: ptr): OSErr;
  26.     inline
  27.         $205F, (* movea.l    (a7)+,a0        ; pop proc/func address    *)
  28.         $4E90; (* jsr            (a0)                ; call proc/func                *)
  29.  
  30.     function GotRequiredParams (theAppleEvent: AppleEvent): OSErr;
  31.         var
  32.             typeCode: DescType;
  33.             actualSize: Size;
  34.             err: OSErr;
  35.     begin
  36.         err := AEGetAttributePtr(theAppleEvent, keyMissedKeywordAttr, typeWildCard, typeCode, nil, 0, actualSize);
  37. (* nil ok: need only function result *)
  38.  
  39.         if err = errAEDescNotFound then        (* we got all the required params: all is ok *)
  40.             GotRequiredParams := noErr
  41.         else if err = noErr then
  42.             GotRequiredParams := errAEEventNotHandled
  43.         else
  44.             GotRequiredParams := err;
  45.     end; (* GotRequiredParams *)
  46.  
  47.     function HandleOAPP (theAppleEvent, reply: AppleEvent; openappp: ptr): OSErr;
  48. (* <aevt> }
  49. {    kCoreEventClass kAEOpenApplication}
  50. {*)
  51.         var
  52.             oe: OSErr;
  53.     begin
  54.     (* We don't expect any params at all, but check in case the client requires any *)
  55.         oe := GotRequiredParams(theAppleEvent);
  56.         oe := DoOApp(openappp);
  57.         HandleOAPP := oe;
  58.     end;
  59.  
  60.     function HandleDocs (theAppleEvent, reply: AppleEvent; dodocp: ptr): OSErr;
  61. (* <aevt>}
  62. {    kCoreEventClass kAEOpenDocuments}
  63. {    kCoreEventClass kAEPrintDocuments}
  64. {*)
  65.         var
  66.             myFSS: FSSpec;
  67.             docList: AEDescList;
  68.             index, itemsInList: longint;
  69.             actualSize: Size;
  70.             keywd: AEKeyword;
  71.             typeCode: descType;
  72.             ignoreWPtr: WindowPtr;
  73.             oe, ooe: OSErr;
  74.     begin
  75.         oe := AEGetParamDesc(theAppleEvent, keyDirectObject, typeAEList, docList);
  76.         if oe = noErr then begin
  77.             ooe := GotRequiredParams(theAppleEvent);
  78. (* now get each alias from the list (as an FSSSpec) and open the associated file. *)
  79.             oe := AECountItems(docList, itemsInList);
  80.             for index := 1 to itemsInList do begin
  81.                 ooe := AEGetNthPtr(docList, index, typeFSS, keywd, typeCode, @myFSS, sizeof(myFSS), actualSize);
  82. (* coercion does alias->fsspec *)
  83.                 if ooe = noErr then
  84.                     ooe := DoDocs(myFSS, dodocp);
  85.             end;
  86.             ooe := AEDisposeDesc(docList);
  87.         end;
  88.         HandleDocs := oe;
  89.     end; (* HandleDocs *)
  90.  
  91.     function HandleQUIT (theAppleEvent, reply: AppleEvent; quitp: ptr): OSErr;
  92. (* <aevt> }
  93. {    kCoreEventClass kAEQuitApplication}
  94. {*)
  95.         var
  96.             oe: OSErr;
  97.             errStr: Str255;
  98.             willQuit: Boolean;                (* did the user allow the quit or cancel *)
  99.     begin
  100. (* We don't expect any params at all, but check in case the client requires any *)
  101.         oe := GotRequiredParams(theAppleEvent);
  102.         oe := DoQuit(quitp);                (* set global boolean: app will exit at end of event loop *)
  103.         if reply.dataHandle <> nil then        (* a reply is sought *)
  104.             begin
  105.             if oe = noErr then
  106.                 errStr := 'OK'
  107.             else
  108.                 errStr := 'user cancelled quit';
  109.             oe := AEPutParamPtr(reply, keyErrorString, typeChar, Ptr(@errStr[1]), length(errStr));
  110.         end;
  111.         HandleQUIT := oe;
  112.     end;
  113.  
  114. {$S Init}
  115.  
  116.     function InitAppleEvents (DoOApp, DoODoc, DoPrint, DoQuit: Ptr): OSErr;
  117.         var
  118.             aevtErr: OSErr;
  119.     begin
  120.         aevtErr := noErr;
  121.         if (aevtErr = noErr) and (DoOApp <> nil) then
  122.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenApplication, @HandleOAPP, longint(DoOApp), false);
  123.         if (aevtErr = noErr) and (DoODoc <> nil) then
  124.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEOpenDocuments, @HandleDocs, longint(DoODoc), false);
  125.         if (aevtErr = noErr) and (DoPrint <> nil) then
  126.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEPrintDocuments, @HandleDocs, longint(DoPrint), false);
  127.         if (aevtErr = noErr) and (DoQuit <> nil) then
  128.             aevtErr := AEInstallEventHandler(kCoreEventClass, kAEQuitApplication, @HandleQUIT, longint(DoQuit), false);
  129.         InitAppleEvents := aevtErr;
  130.     end;
  131.  
  132. end. (* RequiredEventSupport *)